package com.clyme.expediente.controlador;

import com.clyme.expediente.entidad.Especialista;
import com.clyme.expediente.entidad.LineaTrabajo;
import com.clyme.expediente.entidad.Ubigeo;
import com.clyme.expediente.servicios.EspecialistaServicios;
import com.clyme.expediente.utilitarios.SetUbigeo;
import com.clyme.expediente.utilitarios.Utilitario;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
@ManagedBean
@ViewScoped
public class EspecialistaControlador implements Serializable {

    List<Especialista> especialistas;
    List<LineaTrabajo> lineas;
    Especialista especialista;
    LineaTrabajo linea;
    private EspecialistaServicios especialistaServicios;
    private SetUbigeo mapaUbigeo;
    private List<SelectItem> departamentos;
    private List<SelectItem> provincias;
    private List<SelectItem> distritos;
    private String idDepartamento;
    private String idProvincia;
    private String idDistrito;
    private Ubigeo ubigeo;

    public EspecialistaControlador() {

    }

    public void initLista() {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            especialistaServicios = new EspecialistaServicios();
            especialistas = especialistaServicios.obtenerTodos();
        }
    }

    public void initRegistrar() {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            especialistaServicios = new EspecialistaServicios();
            mapaUbigeo = new SetUbigeo();
            especialista = new Especialista();
            linea = new LineaTrabajo();
            lineas = especialistaServicios.obtenerLineas();
            ensamblarUbigeo();
        }
    }

    public void initUpdate() {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            Object parametro = Utilitario.getFlash("idEspecialista");
            if (parametro == null) {
                Utilitario.redireccionarJSF(FacesContext.getCurrentInstance(), "/views/especialista/list.xhtml");
                return;
            }
            especialistaServicios = new EspecialistaServicios();
            especialista = especialistaServicios.obtenerEspecialista(Integer.valueOf(parametro.toString()));
            linea = especialista.getLinea();
            mapaUbigeo = new SetUbigeo();
            lineas = especialistaServicios.obtenerLineas();
            ensamblarUbigeo();
            idDepartamento = especialista.getUbigeo().getCodDepartamento();
            cambiarDepartamentos();
            idProvincia = especialista.getUbigeo().getCodProvincia();
            cambiarProvincias();
            idDistrito = especialista.getUbigeo().getCodDistrito();
        }
    }
    
    private void ensamblarUbigeo(){
        departamentos = new ArrayList<SelectItem>();
        provincias = new ArrayList<SelectItem>();
        distritos = new ArrayList<SelectItem>();
        List<Ubigeo> ubigeos =  especialistaServicios.obtenerUbigeos();
        for(Ubigeo ubige : ubigeos){
            mapaUbigeo.addUbigeo(ubige);
        }
        departamentos = mapaUbigeo.getDepartamentos();
        provincias = mapaUbigeo.getProvincia("0");
        distritos = mapaUbigeo.getDistrito("0","0");

    }
    
    public void cambiarDepartamentos(){ 
        provincias = mapaUbigeo.getProvincia(idDepartamento);
        distritos = mapaUbigeo.getDistrito("0","0");
    }
    
    public void cambiarProvincias(){
        distritos = mapaUbigeo.getDistrito(idDepartamento,idProvincia);
    }
    
    public void prepararEliminar(Integer id)
    {
        especialista = especialistaServicios.obtenerEspecialista(id);
    }

    public void registrarEspecialista() {
        if (!esVistaValida()) {
            return;
        }
        
        ubigeo = especialistaServicios.obtenerUbigeo(idDepartamento, idProvincia, idDistrito);
        especialista.setUbigeo(ubigeo);
        especialista.setLinea(linea);
        especialistaServicios.registrarEspecialista(especialista);
        especialista = new Especialista();
    }
    
    public String irActualizar(int id)
    {
        Utilitario.putFlash("idEspecialista", id);
        return "update.xhtml?faces-redirect=true";
    }

    public void actualizarEspecialista() {
        if (!esVistaValida()) {
            return;
        }
        ubigeo = especialistaServicios.obtenerUbigeo(idDepartamento, idProvincia, idDistrito);
        especialista.setUbigeo(ubigeo);
        especialista.setLinea(linea);
        especialistaServicios.actualizarEspecialista(especialista);
    }
    
    public void eliminarEspecialista()
    {
        especialistaServicios.eliminarEspecialista(especialista);
        especialistas = especialistaServicios.obtenerTodos();
    }

    private boolean esVistaValida() {
        boolean ok = true;
        return ok;
    }

    /**
     * GETTERS AND SETTERS *
     */
    public List<Especialista> getEspecialistas() {
        return especialistas;
    }

    public void setEspecialistas(List<Especialista> especialistas) {
        this.especialistas = especialistas;
    }

    public Especialista getEspecialista() {
        return especialista;
    }

    public void setEspecialista(Especialista especialista) {
        this.especialista = especialista;
    }

    public List<SelectItem> getDepartamentos() {
        return departamentos;
    }

    public void setDepartamentos(List<SelectItem> departamentos) {
        this.departamentos = departamentos;
    }

    public List<SelectItem> getProvincias() {
        return provincias;
    }

    public void setProvincias(List<SelectItem> provincias) {
        this.provincias = provincias;
    }

    public List<SelectItem> getDistritos() {
        return distritos;
    }

    public void setDistritos(List<SelectItem> distritos) {
        this.distritos = distritos;
    }

    public String getIdDepartamento() {
        return idDepartamento;
    }

    public void setIdDepartamento(String idDepartamento) {
        this.idDepartamento = idDepartamento;
    }

    public String getIdProvincia() {
        return idProvincia;
    }

    public void setIdProvincia(String idProvincia) {
        this.idProvincia = idProvincia;
    }

    public String getIdDistrito() {
        return idDistrito;
    }

    public void setIdDistrito(String idDistrito) {
        this.idDistrito = idDistrito;
    }

    public List<LineaTrabajo> getLineas() {
        return lineas;
    }

    public void setLineas(List<LineaTrabajo> lineas) {
        this.lineas = lineas;
    }

    public LineaTrabajo getLinea() {
        return linea;
    }

    public void setLinea(LineaTrabajo linea) {
        this.linea = linea;
    }
    
    

}
